﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SGT_DAL._STG_DALTableAdapters;
using SGT_DAL;

namespace SGT_ON
{
    /// <summary>
    /// Clase utilizada para la presentación y propiedades derivadas.
    /// </summary>
    public partial class ONSector
    {
        public static int SectorIdChaperia
        {
            get
            {
                return Parametros.SectorIdChaperia;
            }
        }
        public static int SectorIdPintura
        {
            get
            {
                return Parametros.SectorIdPintura;
            }
        }
        public static int SectorIdTaller
        {
            get
            {
                return Parametros.SectorIdTaller;
            }
        }
    }
    /// <summary>
    /// Clase base con la lógica de negocio
    /// </summary>
    [System.ComponentModel.DataObject]
    public partial class ONSector
    {
        #region Atributos
        protected int _id;
        protected string _nombre;
        protected string _descripcion;
        protected int? _responsableUsuarioId;
        protected bool _estaActivo;        
        
        //Objetos asociados
        #endregion

        #region Propiedades
        public int ID
        {
            get
            {
                return _id;
            }
            set
            {
                _id = value;
            }
        }
        public string Nombre
        {
            get
            {
                return _nombre;
            }
            set
            {
                _nombre = value;
            }
        }
        public int? ResponsableUsuarioId
        {
            get
            {
                return _responsableUsuarioId;
            }
            set
            {
                _responsableUsuarioId = value;
            }
        }
        public string Descripcion
        {
            get
            {
                return _descripcion;
            }
            set
            {
                _descripcion = value;
            }
        }
        public bool EstaActivo
        {
            get
            {
                return _estaActivo;
            }
            set
            {
                _estaActivo = value;
            }
        }
        
        
        //Objetos asociados

        //Propiedades derivadas
        #endregion

        #region Interfase DAL
        //objeto de la capa DAL
        private static SectorTableAdapter _sectorAD;
        protected static SectorTableAdapter Adaptador
        {
            get
            {
                if (_sectorAD == null)
                    _sectorAD = new SectorTableAdapter();

                return _sectorAD;
            }
        }
        protected static ONSector ObtenerPorID(int pID)
        {   
            _STG_DAL.SectorDataTable _dt;

            _dt = Adaptador.ObtenerPorId(pID);

            // si tiene algo,
            if (_dt.Rows.Count > 0)
                return AsignarRowAObjeto((_STG_DAL.SectorRow)_dt.Rows[0]);

            return null;
        }
        protected static ONSector AsignarRowAObjeto(_STG_DAL.SectorRow pRow)
        {
            ONSector _sector = new ONSector();
            if (pRow != null)
            {
                _sector = new ONSector();
                _sector.ID = pRow.Id;
                _sector.Nombre = pRow.Nombre;
                _sector.Descripcion = pRow.Descripcion;
                if (pRow.IsReponsableUsuarioIdNull() == true)
                    _sector.ResponsableUsuarioId = -1;
                else
                    _sector.ResponsableUsuarioId = pRow.ReponsableUsuarioId;
                _sector.EstaActivo = pRow.EstaActivo;
            }
            return _sector;
        }
        protected ONSector InsertarDAL(string pNombre,string pDescripcion,int? pResponsableUsuarioId,bool pEstaActivo)
        {
            ID = int.Parse(Adaptador.Insertar(pNombre, pDescripcion, pResponsableUsuarioId, pEstaActivo).ToString());
            return this;
        }
        protected bool ActualizarDAL(string pNombre, string pDescripcion, int? pResponsableUsuarioId, bool pEstaActivo, int pId)
        {
            if (0 < Adaptador.Actualizar(pNombre,pDescripcion, pResponsableUsuarioId,pEstaActivo, pId))
                return true;
            else
                return false;
        }
        public void EliminarDAL()
        {
            ONSector _sector = ONSector.ObtenerPorID(this.ID);
            _sector.EstaActivo = false;
            _sector.Actualizar();
        }
        protected static ONSectorColeccion AsignarSectorTableAdapterASectorColeccion(_STG_DAL.SectorDataTable pDataTable)
        {
            ONSectorColeccion _sectores = new ONSectorColeccion();
            ONSector _sector;

            if ((pDataTable != null)
                && (pDataTable.Rows.Count > 0))
            {
                foreach (_STG_DAL.SectorRow _row in pDataTable.Rows)
                {
                    _sector = AsignarRowAObjeto(_row);
                    if (_sector != null)
                        _sectores.Add(_sector);
                }
            }
            return _sectores;
        }
        public static ONSectorColeccion ObtenerTodosLosSectoresDAL()
        {
            return AsignarSectorTableAdapterASectorColeccion(Adaptador.ObtenerTodos());
        }

        #endregion

        #region Métodos
        public ONSector()
        {
            AsignarValoresIniciales();
        }

        public void AsignarValoresIniciales()
        {
            _id = -1;
            Nombre = "";
            Descripcion = "";
            ResponsableUsuarioId = -1;
            EstaActivo = true;
        }

        public static ONSector CrearSector()
        {
            ONSector _sector = new ONSector();
            return _sector;
        }
        public static ONSector CrearSector(int pID)
        {
            ONSector _sector = ObtenerPorID(pID);
            return _sector;
        }
        public ONSector Insertar()
        {
            return InsertarDAL(Nombre, Descripcion, ResponsableUsuarioId, true);
        }
        public bool Actualizar()
        {
            return ActualizarDAL(Nombre, Descripcion, ResponsableUsuarioId, EstaActivo, ID);
        }
        #endregion

        #region Metodos para datasource
        
        public void Actualizar(ONSector pSector)
        {
            if (pSector != null)
                pSector.Actualizar();
        }
        public ONSector Insertar(ONSector pSector)
        {
            if (pSector != null)
                return pSector.Insertar();
            return null;
        }
        public void Eliminar(ONSector pSector)
        {

            pSector.EliminarDAL();
        }
        #endregion
    }
    [System.ComponentModel.DataObject]
    public class ONSectorColeccion : System.Collections.CollectionBase
    {
        public void Add(ONSector pSector)
        {
            this.List.Add(pSector);
        }
        public void AddUnico(ONSector pSector)
        {
            foreach (ONSector _sector in this)
                if (pSector.ID == _sector.ID)
                    return;
            this.List.Add(pSector);
        }
        public void Remove(int index)
        {
            if (index <= Count - 1 || index >= 0)
            {
                this.List.RemoveAt(index);
            }
            else
            {
                throw new System.ArgumentException("Fuera de rango", "original");
            }
        }
        public void Remove(ONSector pSector)
        {
            for (int i = 0; i < this.Count; i++)
            {
                if (this[i].ID == pSector.ID)
                {
                    Remove(i);
                    return;
                }

            }
        }
        public ONSector this[int index]
        {
            get { return ((ONSector)(this.List[index])); }
            set { this.List[index] = value; }
        }
        public void ActualizarSectores(ONSectorColeccion pSectores)
        {
            foreach (ONSector _sector in pSectores)
            {
                _sector.Actualizar();
            }
        }
        public void ActualizarSector(ONSector pSector)
        {
            pSector.Actualizar();
        }

        #region Metodos de colección
        
        #endregion
        #region Para datasource
        public void Insertar(ONSector pSector)
        {
            pSector.Insertar(pSector);
        }
        public ONSectorColeccion ObtenerTodosLosSectores()
        {
            return ONSector.ObtenerTodosLosSectoresDAL();
        }
        #endregion
    }
}
